const app = getApp()
import {
  BASE_URL,
} from '../../api/request'

import {
  tokiktOrderRequest,
} from '../../api/user'

Page({

  /** 页面的初始数据 */
  data: {
    userName: '',               // 用户姓名
    userPhone: '',              // 用户电话
    userRemark: '',             // 用户备注
    goodsId: '',                // 商品id 下单用
    shopName: '',               // 商家名称
    goodsName: '',              // 商品名称
    goodsImage: '',             // 商品图片
    goodsBuyNumber: 1,          // 商品购买数量
    goodsLimNum: 5,             // 商品购买上限
    totalMoney: 0.00,
    packageInfo: '',            // 选中的套餐
    unitPrice: 0.00,               // 单价
    totalPrices: 0.00,             // 总价
    loading: false,
    submitText: '提交订单',
    disabled: false,
    shareUserParentIds: '',         // 分享人的parentIds
    restrictNum:0,
    lastNumber:0,
  },

  onLoad: function (options) {

    /** 监听登录状态 */
    app.checkSession()

    let goodsId = options.goodsId;
    let shopName = options.shopName;
    let goodsName = options.goodsName;
    let restrictNum = options.restrictNum;
    let lastNumber = options.lastNumber;
    let goodsImage = options.goodsImage;
    // let shareUser = options.shareUser;
    let packagesData = JSON.parse(options.packagesInfo);
    this.setData({
      userName: tt.getStorageSync('orderUserName'),               // 用户姓名
      userPhone: tt.getStorageSync('orderUserPhone'),              // 用户电话
      goodsId: goodsId,
      shopName: shopName,
      goodsName: goodsName,
      unitPrice: packagesData.platformPrice.toFixed(2),
      totalPrices: packagesData.platformPrice.toFixed(2),
      goodsImage: goodsImage,
      packageInfo: packagesData,
      restrictNum:restrictNum,
      lastNumber:lastNumber,
    })

    tt.setNavigationBarTitle({
      title: '提交订单',
    })
  },

  /** 购买商品数量加逻辑 */
  addAction: function () {
    let isflag = this.data.restrictNum==0?this.data.lastNumber:this.data.restrictNum
    let goodsNum = (this.data.goodsBuyNumber >= isflag) ? isflag : (this.data.goodsBuyNumber + 1);
    this.setData({
      goodsBuyNumber: goodsNum
    })
    this.calculateTheTotalPrice();
  },

  /** * 购买商品数量减逻辑 */
  reduceAction: function () {
    let goodsNum = (this.data.goodsBuyNumber > 1) ? (this.data.goodsBuyNumber - 1) : 1;
    this.setData({
      goodsBuyNumber: goodsNum
    })
    this.calculateTheTotalPrice();
  },

  /** 输入监听 */
  onNameChange(event) {
    this.setData({
      userName: event.detail.value,               // 用户姓名
    })
    tt.setStorageSync('orderUserName', event.detail.value);
  },
  onPhoneChange(event) {
    this.setData({
      userPhone: event.detail.value,              // 用户电话
    })
    tt.setStorageSync('orderUserPhone', event.detail.value);
  },
  onRemarkChange(event) {
    this.setData({
      userRemark: event.detail.value,             // 用户备注
    })
  },

  /** 计算总价 */
  calculateTheTotalPrice: function () {
    this.setData({
      totalPrices: (this.data.unitPrice * this.data.goodsBuyNumber).toFixed(2)
    })
  },

  /** 提交订单 */
  submitOrderAction: function () {

    if (this.data.userName.length <= 0) {
      tt.showToast({
        title: '请先输入用户名',
        duration: 2000,
        icon: 'none',
      })
      return
    }

    if (this.data.userPhone.length <= 0) {
      tt.showToast({
        title: '请先输入手机号',
        duration: 2000,
        icon: 'none',
      })
      return
    }

    this.configPayLoading(true)

    let that = this

    /** id:商品 num:数量 packageId:套餐 parentIds:挂载者id */
    var params = {
      name: this.data.userName,
      phone: this.data.userPhone,
      remark: this.data.userRemark,
      id: this.data.goodsId,
      num: this.data.goodsBuyNumber,
      packageId: this.data.packageInfo.id,
      parentIds: app.globalData.shareUser
    }
    tokiktOrderRequest(params).then((res) => {
      console.log(res)
      tt.pay({
        orderInfo: {
          app_id: res.result.app_id,                       // 开发者后台支付设置页的 app_id 
          sign_type: res.result.sign_type,                             // 固定值：MD5。商户生成签名的算法类型
          out_order_no: res.result.out_order_no,           // 商户订单号
          merchant_id: res.result.merchant_id,                    // 开发者后台支付设置页的商户号 
          timestamp: res.result.timestamp,                      // 发送请求的时间戳，精确到秒
          product_code: res.result.product_code,                          // 固定值：pay
          payment_type: res.result.payment_type,                       // 固定值：direct
          total_amount: res.result.total_amount,                              // 金额，整型，单位：分（不能有小数）
          trade_type: res.result.trade_type,                             // 固定值：H5
          uid: res.result.uid,                          // 用户唯一标识
          version: res.result.version,                               // 固定值：2.0
          currency: res.result.currency,                              // 固定值: CNY。币种
          subject: res.result.subject,                     // 商户订单名称
          body: res.result.body,                        // 商户订单详情
          trade_time: res.result.trade_time,                     // 下单时间戳，精确到秒。如果两次支付(调用 tt.pay)传入的订单号(out_order_no)相同，则必须保证 trade_time 也相同。
          valid_time: res.result.valid_time,                            // 订单有效时间（单位 秒）
          notify_url: res.result.notify_url,      // ??????固定值：https://tp-pay.snssdk.com/paycallback
          wx_url: res.result.wx_url,
          wx_type: res.result.wx_type,
          alipay_url: res.result.alipay_url,
          sign: res.result.sign,     // 签名，具体签名方案 服务端签名
          risk_info: res.result.risk_info,              // 支付风控参数。序列化后的 JSON 结构字符串，JSON 结构如下：{ip: '用户外网IP'}
        },
        service: 1,     // 固定值：1 （拉起小程序收银台）
        payChannel: {
          default_pay_channel: "alipay", // wx || alipay
        },
        getOrderStatus(res) {   // 商户前端实现的查询支付订单状态方法（该方法需要返回个 Promise 对象）；若开发者不需要微信支付则不用实现（仅在 service=1 时生效）
          return new Promise(function (resolve, reject) {
            // 商户前端根据 out_order_no 请求商户后端查询微信支付订单状态
            tt.request({
              url: `${BASE_URL}/goods/getOrderStatus`,
              data: { orderId: res.out_order_no },
              method: "POST",
              header: {
                "token": tt.getStorageSync('token'),
                "content-type": "application/x-www-form-urlencoded"
              },
              success(res) {
                // 商户后端查询的微信支付状态，通知收银台支付结果
                resolve({ code: res.data.code });
              },
              fail(err) {
                reject(err);
              },
            });
          })
        },
        success(res) {    // 0：支付成功 1：支付超时 2：支付失败 3：支付关闭 4：支付取消 9：订单状态开发者自行获取。只要调起收银台成功，支付状态都会回调success返回，开发者依据返回的 code 值，进行后续业务逻辑处理
          that.configPayLoading(false)
          if (res.code == 0) {  // 只有 0支付成功跳转个人中心
            console.log(res)
            // 支付成功处理逻辑，只有res.code=0时，才表示支付成功
            // 但是最终状态要以商户后端结果为准
            console.log('支付成功开始跳转了')
            tt.switchTab({
              url: `../../pages/me/me`, // 指定页面的url
            });
          }
        },
        fail(res) {
          // 调起收银台失败处理逻辑
          that.configPayLoading(false)
        },
      });

    }).catch((res) => {
      console.log('tokiktOrderRequest请求失败')
      console.log(res)
      tt.showToast({
        title: res.data.msg,
        duration: 2000,
        icon: 'none',
      })
      that.configPayLoading(false)
    })
  },

  configPayLoading: function (loading) {
    this.setData({
      loading: loading,
      // disabled: loading,
      submitText: loading == true ? '下单中...' : '提交订单'
    })
  }

})
